package com.base.invoke.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 字符串相关操作工具类
 * 包含Long、Integer、Double、String等转换处理
 * @author coolpig
 * @date 2019-09-27
 */
public class StrUtils {
    private static Log logger = LogFactory.getLog(StrUtils.class);


    /**
     * obj转String
     * @param val
     * @return
     */
    public static String stringValueOf(Object val) {
        if (val == null) {
            return null;
        }
        try {
            return String.valueOf(val);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * obj转Long
     * @param val
     * @return
     */
    public static Long longValueOf(Object val) {
        Double valueOf = doubleValueOf(stringValueOf(val));
        if (valueOf != null) {
            return valueOf.longValue();
        } else {
            return null;
        }
    }

    /**
     * obj转Integer
     * @param val
     * @return
     */
    public static Integer integerValueOf(Object val) {
        Double valueOf = doubleValueOf(stringValueOf(val));
        if (valueOf != null) {
            return valueOf.intValue();
        } else {
            return null;
        }
    }

    /**
     * string转Double
     * @param val
     * @return
     */
    public static Double doubleValueOf(String val) {
        try {
            return Double.parseDouble(val);
        } catch (Exception e) {
            return null;
        }
    }


    /**
     * 字符串转换unicode
     *
     * @param string
     * @return
     */
    public static String string2Unicode(String string) {
        StringBuilder unicode = new StringBuilder();
        for (int i = 0; i < string.length(); i++) {
            // 取出每一个字符
            char c = string.charAt(i);
            // 转换为unicode
            unicode.append("\\u").append(Integer.toHexString(c | 0x10000).substring(1));
        }
        return unicode.toString();
    }

    /**
     * unicode 转字符串
     * @param unicode 全为 Unicode 的字符串
     * @return
     */
    public static String unicode2String(String unicode) {
        StringBuilder string = new StringBuilder();
        String[] hex = unicode.split("\\\\u");

        for (int i = 1; i < hex.length; i++) {
            // 转换出每一个代码点
            int data = Integer.parseInt(hex[i], 16);
            // 追加成string
            string.append((char) data);
        }

        return string.toString();
    }

    public static void main(String[] args) {
        System.out.println(string2Unicode("313413sf"));
        System.out.println(unicode2String("\\u0033\\u0031\\u0033\\u0034\\u0031\\u0033\\u0073\\u0066"));


    }
}
